package com.analyze.analyzeFileText.file;

import net.sourceforge.tess4j.TesseractException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
/**
 * @ClassName WordChecker
 * @Description TODO
 * @Author Dell
 * @Date 2024/12/27
 **/

public class WordChecker {
    public static void main(String[] args) throws IOException, TesseractException {
        // 打开文件流
        FileInputStream file = new FileInputStream("F:\\uploadFile\\固投纳统问题整理.docx");
        XWPFDocument document = new XWPFDocument(file);

        // 提取文档中的文本
        StringBuilder text = new StringBuilder();
        List<XWPFParagraph> paragraphs = document.getParagraphs();

        // 遍历每个段落并提取文本
        for (XWPFParagraph paragraph : paragraphs) {
            for (XWPFRun run : paragraph.getRuns()) {
                text.append(run.getText(0)); // 获取文本
            }
        }

        // 输出提取的文本内容
        System.out.println("提取的文本内容: ");
        System.out.println(text.toString());

        // 判断文本是否包含"装饰"
        if (text.toString().contains("装饰")) {
            System.out.println("发现不允许的字样 '装饰'。");
        } else {
            System.out.println("文件通过审核。");
        }

        // 3. 提取图片并进行 OCR 识别
        List<XWPFPictureData> pictures = document.getAllPictures();
        for (XWPFPictureData picture : pictures) {
            // 获取图片数据
            byte[] pictureData = picture.getData();

            // 将字节数据转换为 BufferedImage
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(pictureData);
            BufferedImage image = ImageIO.read(byteArrayInputStream); // 使用 ImageIO.read() 转换

            // 使用 Tesseract OCR 识别图片中的文字
            ITesseract tesseract = new Tesseract();
            // 设置 Tesseract 可执行文件路径，如果需要指定语言，可以使用 setLanguage 方法
            tesseract.setDatapath("D:\\software\\Tesseract-OCR\\tessdata"); // 指定 tesseract 的语言包路径
            tesseract.setLanguage("chi_sim"); // 设置为简体中文
            String ocrText = tesseract.doOCR(image);
            System.out.println("图片中的文本内容: ");
            System.out.println(ocrText);

            // 检查图片中的文字是否包含 "装饰"
            if (ocrText.contains("投资")) {
                System.out.println("图片中发现不允许的字样 '装饰'。");
            }
        }



        // 关闭文件流
        file.close();
    }
}

